﻿using System;
using System.Collections.Generic;
using System.Web.Mvc;

namespace Helpers
{
    public static class HtmlExtensions
    {
        #region AlphabeticCharactersTextBox

        /// <summary>
        /// Returns a text input element that allows only alphabetic characters from a to z and A to Z and space characters.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <returns></returns>
        public static FilteredTextBox AlphabeticCharactersTextBox(this HtmlHelper htmlHelper, string name)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.AlphabeticCharacter, string.Empty, string.Empty);
        }

        /// <summary>
        /// Returns a text input element that allows only alphabetic characters from a to z and A to Z and space characters.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <returns></returns>
        public static FilteredTextBox AlphabeticCharactersTextBox(this HtmlHelper htmlHelper, string name, object value)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.AlphabeticCharacter, string.Empty, string.Empty).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows only alphabetic characters from a to z and A to Z and space characters.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox AlphabeticCharactersTextBox(this HtmlHelper htmlHelper, string name, object value, IDictionary<string, object> htmlAttributes)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.AlphabeticCharacter, string.Empty, string.Empty).SetValue(value).SetHtmlAttributes(htmlAttributes);
        }

        /// <summary>
        /// Returns a text input element that allows only alphabetic characters from a to z and A to Z and space characters.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <returns></returns>
        public static FilteredTextBox AlphabeticCharactersTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.AlphabeticCharacter, string.Empty, string.Empty)).SetValue(text);
        }

        /// <summary>
        /// Returns a text input element that allows only alphabetic characters from a to z and A to Z and space characters.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox AlphabeticCharactersTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.AlphabeticCharacter, string.Empty, string.Empty)).SetValue(text).SetHtmlAttributes(htmlAttributes);
        }

        #endregion

        #region NumbersTextBox

        /// <summary>
        /// Returns a text input element that allows only numbers.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <returns></returns>
        public static FilteredTextBox NumbersTextBox(this HtmlHelper htmlHelper, string name)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.Numbers, string.Empty, string.Empty);
        }

        /// <summary>
        /// Returns a text input element that allows only numbers.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <returns></returns>
        public static FilteredTextBox NumbersTextBox(this HtmlHelper htmlHelper, string name, object value)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.Numbers, string.Empty, string.Empty).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows only numbers.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox NumbersTextBox(this HtmlHelper htmlHelper, string name, object value, IDictionary<string, object> htmlAttributes)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.Numbers, string.Empty, string.Empty).SetValue(value).SetHtmlAttributes(htmlAttributes);
        }

        /// <summary>
        /// Returns a text input element that allows only numbers.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <returns></returns>
        public static FilteredTextBox NumbersTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.Numbers, string.Empty, string.Empty)).SetValue(text);
        }

        /// <summary>
        /// Returns a text input element that allows only numbers.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox NumbersTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.Numbers, string.Empty, string.Empty)).SetValue(text).SetHtmlAttributes(htmlAttributes);
        }

        #endregion

        #region DecimalNumbersTextBox

        /// <summary>
        /// Returns a text input element that allows numbers and the decimal separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersTextBox(this HtmlHelper htmlHelper, string name)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbers, string.Empty, string.Empty);
        }

        /// <summary>
        /// Returns a text input element that allows numbers and the decimal separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersTextBox(this HtmlHelper htmlHelper, string name, object value)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbers, string.Empty, string.Empty).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows numbers and the decimal separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersTextBox(this HtmlHelper htmlHelper, string name, object value, IDictionary<string, object> htmlAttributes)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbers, string.Empty, string.Empty).SetValue(value).SetHtmlAttributes(htmlAttributes);
        }

        /// <summary>
        /// Returns a text input element that allows numbers and the decimal separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbers, string.Empty, string.Empty)).SetValue(text);
        }

        /// <summary>
        /// Returns a text input element that allows numbers and the decimal separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbers, string.Empty, string.Empty)).SetValue(text).SetHtmlAttributes(htmlAttributes);
        }

        #endregion

        #region DecimalNumbersWithGroupSeparatorTextBox

        /// <summary>
        /// Returns a text input element that allows numbers, the decimal separator and the currency group separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersWithGroupSeparatorTextBox(this HtmlHelper htmlHelper, string name)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbersWithGroupSeparator, string.Empty, string.Empty);
        }

        /// <summary>
        /// Returns a text input element that allows numbers, the decimal separator and the currency group separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersWithGroupSeparatorTextBox(this HtmlHelper htmlHelper, string name, object value)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbersWithGroupSeparator, string.Empty, string.Empty).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows numbers, the decimal separator and the currency group separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="value">The value of the input element.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersWithGroupSeparatorTextBox(this HtmlHelper htmlHelper, string name, object value, IDictionary<string, object> htmlAttributes)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbersWithGroupSeparator, string.Empty, string.Empty).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows numbers, the decimal separator and the currency group separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersWithGroupSeparatorTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbersWithGroupSeparator, string.Empty, string.Empty)).SetValue(text);
        }

        /// <summary>
        /// Returns a text input element that allows numbers, the decimal separator and the currency group separator as defined by the current culture info.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox DecimalNumbersWithGroupSeparatorTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.DecimalNumbersWithGroupSeparator, string.Empty, string.Empty)).SetValue(text).SetHtmlAttributes(htmlAttributes);
        }

        #endregion

        #region ValidCharactersFilteredTextBox

        /// <summary>
        /// Returns a text input element that allows all the characters specified in the ValidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="validCharacters">A string containing the valid characters for the text box</param>
        /// <returns></returns>
        public static FilteredTextBox ValidCharactersFilteredTextBox(this HtmlHelper htmlHelper, string name, string validCharacters)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomValidCharacters, validCharacters, string.Empty);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters specified in the ValidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="validCharacters">A string containing the valid characters for the text box</param>
        /// <param name="value">The value of the input element.</param>        
        /// <returns></returns>
        public static FilteredTextBox ValidCharactersFilteredTextBox(this HtmlHelper htmlHelper, string name, string validCharacters, object value)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomValidCharacters, validCharacters, string.Empty).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters specified in the ValidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="validCharacters">A string containing the valid characters for the text box</param>
        /// <param name="value">The value of the input element.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox ValidCharactersFilteredTextBox(this HtmlHelper htmlHelper, string name, string validCharacters, object value, IDictionary<string, object> htmlAttributes)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomValidCharacters, validCharacters, string.Empty).SetValue(value).SetHtmlAttributes(htmlAttributes);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters specified in the ValidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="validCharacters">A string containing the valid characters for the text box</param>
        /// <returns></returns>
        public static FilteredTextBox ValidCharactersFilteredTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string validCharacters)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomValidCharacters, validCharacters, string.Empty)).SetValue(text);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters specified in the ValidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="validCharacters">A string containing the valid characters for the text box</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox ValidCharactersFilteredTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string validCharacters, IDictionary<string, object> htmlAttributes)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomValidCharacters, validCharacters, string.Empty)).SetValue(text).SetHtmlAttributes(htmlAttributes);
        }

        #endregion

        #region InvalidCharactersFilteredTextBox

        /// <summary>
        /// Returns a text input element that allows all the characters except the ones specified in the InvalidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="invalidCharacters">A string containing the characters that are not allowed by the text box</param>
        /// <returns></returns>
        public static FilteredTextBox InvalidCharactersFilteredTextBox(this HtmlHelper htmlHelper, string name, string invalidCharacters)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomInvalidCharacters, string.Empty, invalidCharacters);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters except the ones specified in the InvalidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="invalidCharacters">A string containing the characters that are not allowed by the text box</param>
        /// <param name="value">The value of the input element.</param>        
        /// <returns></returns>
        public static FilteredTextBox InvalidCharactersFilteredTextBox(this HtmlHelper htmlHelper, string name, string invalidCharacters, object value)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomInvalidCharacters, string.Empty, invalidCharacters).SetValue(value);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters except the ones specified in the InvalidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="name">The name of the form field.</param>
        /// <param name="invalidCharacters">A string containing the characters that are not allowed by the text box</param>
        /// <param name="value">The value of the input element.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox InvalidCharactersFilteredTextBox(this HtmlHelper htmlHelper, string name, string invalidCharacters, object value, IDictionary<string, object> htmlAttributes)
        {
            return new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomInvalidCharacters, string.Empty, invalidCharacters).SetValue(value).SetHtmlAttributes(htmlAttributes);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters except the ones specified in the InvalidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="invalidCharacters">A string containing the characters that are not allowed by the text box</param>
        /// <returns></returns>
        public static FilteredTextBox InvalidCharactersFilteredTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string invalidCharacters)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomInvalidCharacters, string.Empty, invalidCharacters)).SetValue(text);
        }

        /// <summary>
        /// Returns a text input element that allows all the characters except the ones specified in the InvalidCharacters field.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="expression">An expression that identifies the object that contains the properties to render.</param>
        /// <param name="invalidCharacters">A string containing the characters that are not allowed by the text box</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static FilteredTextBox InvalidCharactersFilteredTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string invalidCharacters, IDictionary<string, object> htmlAttributes)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var text = metadata.Model;
            var name = ExpressionHelper.GetExpressionText(expression);
            return (new FilteredTextBox(htmlHelper, name, FilteredTextBox.FilterType.CustomInvalidCharacters, string.Empty, invalidCharacters)).SetValue(text).SetHtmlAttributes(htmlAttributes);
        }

        #endregion
    }
}